<template>
  <div class="app-container">
    <el-card style="margin-bottom:20px;">
      <div slot="header" class="clearfix">
        <span>个人信息</span>
      </div>

      <div class="user-profile">
        <div class="box-center">
          <pan-thumb :image="user.avatar" :height="'100px'" :width="'100px'" :hoverable="false">
            <div>角色</div>
            {{ user.role }}
          </pan-thumb>
        </div>
        <div class="box-center">
          <div class="user-name text-center">{{ user.name }}</div>
          <div class="user-role text-center text-muted">{{ user.role | uppercaseFirst }}</div>
        </div>
      </div>

      <div class="user-bio">
        <div class="user-education user-bio-section">
          <div class="user-bio-section-header"><svg-icon icon-class="education" /><span>信息</span></div>
          <div class="user-bio-section-body">
            <div class="text-muted">
              <span>邮箱：</span>
              <span>{{ user.email }}</span>
            </div>
            <div class="text-muted">
              <span>性别：</span>
              <span>{{ user.infos.gender|formatGender }}</span>
            </div>
            <div class="text-muted">
              <span>手机：</span>
              <span>{{ user.infos.telNumber }}</span>
            </div>
          </div>
        </div>

        <div class="user-skills user-bio-section">
          <div class="user-bio-section-header"><svg-icon icon-class="skill" /><span>操作</span></div>
          <div class="user-bio-section-body">
            <el-button type="primary" @click="editUserInfo">编辑</el-button>
            <el-button @click="changePassword">修改密码</el-button>
          </div>
        </div>
      </div>
    </el-card>
    <el-dialog
      title="修改密码"
      :visible.sync="cpDialog.visible"
      width="40%"
      destroy-on-close
    >
      <change-password
        :values="cpDialog.values"
        @onCancel="cpDialog.visible = false"
        @onSubmit="onChangePasswordSubmit"
      />
    </el-dialog>
    <el-dialog
      title="修改信息"
      :visible.sync="editDialog.visible"
      width="40%"
      destroy-on-close
    >
      <user-edit
        :values="editDialog.values"
        @onCancel="editDialog.visible = false"
        @onSubmit="onUserInfoSubmit"
      />
    </el-dialog>
  </div>
</template>

<script>
import PanThumb from '@/components/PanThumb'
import ChangePassword from '@/views/users/changepassword'
import UserEdit from '@/views/users/edit'
import { putUser, changePassword } from '@/api/user'

export default {
  components: { PanThumb, UserEdit, ChangePassword },
  props: {
    user: {
      type: Object,
      default: () => {
        return {
          name: '',
          email: '',
          avatar: '',
          role: '',
          infos: {}
        }
      }
    }
  },
  data() {
    return {
      cpDialog: {
        visible: false,
        values: {}
      },
      editDialog: {
        visible: false,
        values: {}
      }
    }
  },
  methods: {
    editUserInfo() {
      this.editDialog.values = this.user.infos
      this.editDialog.visible = true
    },
    changePassword() {
      this.cpDialog.values = this.user.infos
      this.cpDialog.visible = true
    },
    onChangePasswordSubmit(formData) {
      changePassword(formData).then(ret => {
        console.log('ChangePassword ret', ret)
        this.$message({
          type: 'success',
          message: '修改成功！'
        })
        this.cpDialog.visible = false
        // and logout
        this.logout()
      })
    },
    async logout() {
      await this.$store.dispatch('user/logout')
      this.$router.push(`/login?redirect=${this.$route.fullPath}`)
    },
    onUserInfoSubmit(formData) {
      putUser(formData).then(ret => {
        console.log('onUserInfoSubmit ret', ret)
        this.$message({
          type: 'success',
          message: '修改成功！'
        })
        this.editDialog.visible = false
      }).then(() => {
        this.$store.dispatch('user/getInfo')
      })
    }
  }
}
</script>

<style lang="scss" scoped>
.box-center {
  margin: 0 auto;
  display: table;
}

.text-muted {
  margin-top: 15px;
  color: #777;
}

.user-profile {
  .user-name {
    font-weight: bold;
  }

  .box-center {
    padding-top: 10px;
  }

  .user-role {
    padding-top: 10px;
    font-weight: 400;
    font-size: 14px;
  }

  .box-social {
    padding-top: 30px;

    .el-table {
      border-top: 1px solid #dfe6ec;
    }
  }

  .user-follow {
    padding-top: 20px;
  }
}

.user-bio {
  margin-top: 20px;
  color: #606266;

  span {
    padding-left: 4px;
  }

  .user-bio-section {
    font-size: 14px;
    padding: 15px 0;

    .user-bio-section-header {
      border-bottom: 1px solid #dfe6ec;
      padding-bottom: 10px;
      margin-bottom: 10px;
      font-weight: bold;
    }
  }
}
</style>
